package org.strategies.dao;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.core.simple.SimpleJdbcCall;
import org.springframework.stereotype.Repository;

/**
 * Created by DevMode on 06.01.14.
 */
@Repository
public abstract class AbstractDao {

    /** Расширение DAO классов с SQL запросами */
    protected static final String SQL_DAO_FILENAME_EXT = ".sql";

    @Autowired
    protected QueryProvider queryProvider;

    @Autowired
    protected JdbcTemplate jdbc;

    @Autowired
    protected NamedParameterJdbcTemplate namedJdbc;

    @Autowired
    protected SimpleJdbcCall simpleJdbc;

    /**
     * Возвращает SQL запрос по имени запроса
     * @param queryName имя SQL запроса
     * @return текст SQL запроса
     */
    protected String getQuery(final String queryName) {
        return queryProvider.getQuery(getSqlDaoFilename(), queryName);
    }

    /**
     * @return имя DAO файла с SQL запросами.
     */
    protected String getSqlDaoFilename() {
        return this.getClass().getSimpleName() + SQL_DAO_FILENAME_EXT;
    }
}
